package edu.umassd.raddacl;

/**
 * A cluster is a collection of observations that are related in some
 * significant way. Basically, the observations in a cluster are "similar".
 * 
 * Implementor of this interface should define what "similar" means.
 * 
 * @author Dan Avila
 * 
 */
public interface Cluster extends Iterable<Observation>
{
	/**
	 * Splits this cluster over every dimension. An observation in the current
	 * cluster will belong to at most one of the newly generated clusters.
	 * 
	 * @return an iterator to traverse the newly created clusters.
	 */
	Iterable<Cluster> split();

	/**
	 * Gets the parent of this cluster.
	 * 
	 * @return the parent of this cluster.
	 */
	Cluster getParent();
}
